Функциональная парадигма меняет мышление разработчика, смещая его внимание с «обновления состояния» к применению математических преобразований к неизменяемым значениям. В Эликсире данные никогда не изменяются — они просто рождаются заново в новых формах.
1. Математическое утверждение
Когда вы пишете $x = a + 1$, вы не присваиваете результат переменной. Вместо этого вы просто утверждаете что выражения $x$ и $a + 1$ имеют одинаковое значение. Это соответствует алгебраической логике, где $x$ представляет фиксированное значение в конкретном контексте.
2. Неизменяемость как гарантия
В Эликсире все значения неизменяемы. Данные не могут быть изменены после создания. Это устраняет «побочные эффекты», при которых функция может неожиданно изменить глобальную переменную или переданный объект, обеспечивая предсказуемость и безопасность кода для многопоточного выполнения.
3. Трансформация против изменения
Мы никогда не изменяем данные напрямую. В Эликсире нет оператора присваивания; вместо этого он пытается соответствовать значениям шаблонам. Чтобы «изменить» значение, мы передаём исходные данные через функцию, чтобы создать полностью новую версию.
"elixir"
iex> cap_name = String.capitalize name
"Elixir"
iex> name
"elixir" (Последний экземпляр!)